<?php
class ZhifubaoPay
{
	/*
	 * 五彩金农支付宝
	 *  ID:2088911832850294
		KEY:kfk5rw8yerb6zi2mgyrcsrp40l937wf7
	 * 
	 * 
	 */
	private $chongzhi_notify_url="http://www.mwantu.com/paydo/chongzhi_notifyurl.php";
	
	private $data_arr = array(
					          'service' => 'mobile.securitypay.pay',
							  //这里是你在成功申请支付宝接口后获取到的PID；(需要配置)
					          'partner' => '2088202909529442',
					          '_input_charset' => 'utf-8',
					          'sign_type' => 'RSA',
					          'sign' => '',
		    				  'notify_url'=>"http://www.mwantu.com/paydo/notifyurl.php",//(需要配置)
					          'out_trade_no' => '',//商户网站唯一订单号 (需要赋值)
					          'subject' => '',//商品名称 (需要赋值)
					          'payment_type' => 1,//支付类型 
					          'seller_id' => '2088202909529442',//支付宝账号和pid保持一致 (需要配置)
					          'total_fee' => 0,//订单总价格 (需要赋值)
					          'body' => '',//商品详情 (需要赋值)
		    	  		     );
    public function check_data()
    {
    	if(empty($this->data_arr['notify_url']))
    	{
    		//$msg='notify_url为空';
    		return false;
    	}
    	
    	if(empty($this->data_arr['out_trade_no']))
    	{
    		//$msg='订单号为空为空';
    		return false;
    	}
    	if(empty($this->data_arr['subject']))
    	{
    		//$msg='商品名称为空';
    		return false;
    	}
    	if(empty($this->data_arr['total_fee']))
    	{
    		//$msg='订单总价格为空';
    		return false;
    	}
    	if(empty($this->data_arr['body']))
    	{
    		//$msg='商品详情为空';
    		return false;
    	}
    	return true;
    }
	//数组排序
 	private  function argSort($para)
 	{
        ksort($para);
        reset($para);
        return $para;
    }
    
    //将数组转成字符串
    private function createString($arr)
    {
    	$str='';
    	foreach($arr as $key=>$value)
		{
			if($key === 'sign_type' || $key === 'sign')
			{
				continue;
			}
			else
			{
				if($str === '')
				{
					$str=$key.'='.'"'.$value.'"';
				}
				else 
				{
					$str=$str.'&'.$key."=".'"'.$value.'"';
				}
			}
		}
		return $str;
    }
    
    //签名字符串
	private function sign($str) 
	{
		$filepath="./paydo/key/rsa_private_key.pem";//(配置)
		//extension_loaded('openssl') or die('php需要openssl扩展支持');
        //file_exists($filepath) or die('密钥或者公钥的文件路径不正确');
        
        //读取私钥文件，注意此处改成你的正确文件路径
        //打开私钥文件(该私钥不同的账户都要生成不同的私钥)
        $priKey = file_get_contents($filepath);//(需要配置)
        
        //转换为openssl密钥，必须是没有经过pkcs8转换的私钥
        $res = openssl_pkey_get_private($priKey);
        
        //调用openssl内置签名方法，生成签名$sign
        $sign = '';
        openssl_sign($str, $sign, $res);
        //释放资源
        openssl_free_key($res);
        //base64编码
        $sign = base64_encode($sign);
        return $sign;
    }
    
    //得到支付宝签名字符串
    public function get_sign_str($data)
    {
    	//读取配置文件中的配置参数
//    	$config=Common::getConfigValue("zhifubao");
//    	$this->data_arr['partner']=$config['partner'];
//    	$this->data_arr['notify_url']=$config['notify_url'];
//    	$this->data_arr['seller_id']=$config['seller_id'];
		
    	$this->data_arr['out_trade_no'] = $data['out_trade_no'];
    	$this->data_arr['subject']      = $data['subject'];
    	$this->data_arr['total_fee']    = sprintf("%.2f",$data['total_fee']);
    	$this->data_arr['body']         = $data['body'];
    	//数据验证
//    	if(!$this->check_data())
//    	{
//    		return false;
//    	}
    	
    	//第一步  将数组排序
    	$arr=$this->argSort($this->data_arr);
    	
    	//第二步  创建字符串
    	$str=$this->createString($arr);
    	
    	//第三步  签名字符串
    	$new_str=$this->sign($str);
    	
    	//return urlencode($str.'&sign='.'"'.urlencode($new_str).'"'.'&sign_type='.'"'.$this->data_arr['sign_type'].'"');
    	return $str.'&sign='.'"'.$new_str.'"'.'&sign_type='.'"'.$this->data_arr['sign_type'].'"';
    	
    }
    
    
    //得到充值字符串签名
    public function get_chongzhi_sign_str($data)
    {
        /*
    	$this->data_arr['notify_url'] = $this->chongzhi_notify_url;
    	$this->data_arr['out_trade_no']=$data['out_trade_no'];
    	$this->data_arr['subject']=$data['subject'];
    	$this->data_arr['total_fee']=sprintf("%.2f",$data['total_fee']);
    	$this->data_arr['body']=$data['body'];
    	
    	//第一步  将数组排序
    	$arr=$this->argSort($this->data_arr);
    	
    	//第二步  创建字符串
    	$str=$this->createString($arr);
    	
    	//第三步  签名字符串
    	$new_str=$this->sign($str);
    	
    	return urlencode($str.'&sign='.'"'.urlencode($new_str).'"'.'&sign_type='.'"'.$this->data_arr['sign_type'].'"');
    	*/
    }
    
}
?>